package com.module.base.utils;

import android.view.ViewParent;

import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;

import com.module.base.base.adapter.proxy.RefreshLayout;
import com.module.base.widget.layoutmanager.NoScrollLayoutManager;

import java.util.HashMap;
import java.util.Map;

/**
 * 循环屏蔽父类滑动问题
 */
public class ParentDisableUtils {

    /**
     * 用于存放最初的滑动状态，如果是禁用，则不需要处理嵌套滑动问题
     */
    private static Map<Integer, Boolean> map = new HashMap<>();

    /**
     * 屏蔽横向父类
     */
    public static void setHorizontalParentDisable(ViewParent parent, boolean disable) {
        if (parent == null) {
            return;
        }
        try {
            //禁用ViewPager2 或者 RecyclerView(必须使用NoScrollLayoutManager)
            //如果需要ViewPage 则需要自定义，因为现在都是使用ViewPager2，所以暂时不处理
            if (parent instanceof ViewPager2 && ((ViewPager2) parent).getOrientation() == ViewPager2.ORIENTATION_HORIZONTAL) {
                boolean oldDisable = false;//之前是否是禁用滑动状态，如果是，则不进行操作。
                if (!map.containsKey(parent.hashCode())) {
                    oldDisable = !((ViewPager2) parent).isUserInputEnabled();
                    map.put(parent.hashCode(), oldDisable);
                }
                //最初没有禁用滑动，才能设置
                if (!map.get(parent.hashCode())){
                    ((ViewPager2) parent).setUserInputEnabled(!disable);
                }
            } else if (parent instanceof RecyclerView && ((RecyclerView) parent).getLayoutManager() instanceof NoScrollLayoutManager) {
                NoScrollLayoutManager linearLayoutManager = (NoScrollLayoutManager) ((RecyclerView) parent).getLayoutManager();
                if (linearLayoutManager.getOrientation() == RecyclerView.HORIZONTAL) {
                    boolean oldDisable = false;//之前是否是禁用滑动状态，如果是，则不进行操作。
                    if (!map.containsKey(parent.hashCode())) {
                        oldDisable = linearLayoutManager.isNoScroll();
                        map.put(parent.hashCode(), oldDisable);
                    }
                    //最初没有禁用滑动，才能设置
                    if (!map.get(parent.hashCode())){
                        linearLayoutManager.setNoScroll(disable);
                    }
                }
            } else if (parent instanceof RefreshLayout && ((RefreshLayout) parent).isMoveSpinner) {
                //如果遇到RefreshLayout正在下拉，则提前结束
                return;
            }
            setHorizontalParentDisable(parent.getParent(), disable);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
